﻿using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace moc.Common
{
    public class Md5
    {
        public string Md5Encrypt(string str)
        {
            MD5 md5 = MD5.Create();
            byte[] byts = System.Text.Encoding.GetEncoding("gbk").GetBytes(str);
            byte[] mb5Byte = md5.ComputeHash(byts);
            md5.Clear();
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < mb5Byte.Length; i++)
            {
                sb.Append(mb5Byte[i].ToString("x2"));
            }
            return sb.ToString();
        }
        /// <summary>
        /// 计算文件的MD5值
        /// </summary>
        /// <param name="filepath"></param>
        /// <returns></returns>
        public static String GetStreamMD5(Stream stream)
        {
            string strResult = "";
            string strHashData = "";
            byte[] arrbytHashValue;
            System.Security.Cryptography.MD5CryptoServiceProvider oMD5Hasher =
                new System.Security.Cryptography.MD5CryptoServiceProvider();
            arrbytHashValue = oMD5Hasher.ComputeHash(stream); //计算指定Stream 对象的哈希值
            //由以连字符分隔的十六进制对构成的String，其中每一对表示value 中对应的元素；例如“F-2C-4A”
            strHashData = System.BitConverter.ToString(arrbytHashValue);
            //替换-
            strHashData = strHashData.Replace("-", "");
            strResult = strHashData;
            return strResult;
        }
    }
}
